home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Technotools
/
Technotools (Chestnut CD-ROM)(1993).ISO
/
database
/
boxfunc
/
box_func.prg
next >
Wrap
Text File
|
1991-01-17
|
8KB
|
317 lines
*********************************************
* FUNCTIONS FOR BOXES FOR Clipper SUMMER '87
* and Compatible with Clipper 5.0
* ebox(), mbox(), pbox(), dbox()
*
* ALL box funtions return the string for restoring the screen
* with RESTSCREEN().
*
* If you find these functions useful, please let me know.
* A contribution of $5.00 would'nt hurt either. ENJOY!!
*
*
* by: DAVID TESSITORE
* 15 Teed Street
* Huntington Station, NY 11746
*********************************************
***********************************************
****EXPLODING BOX***
****
**** example: ebox(5,0,20,79,"GR+/R",30,1,.T.,"Dave's Menu","R/W")
****
**********************************************
FUNCTION ebox
**********************************************
PARAMETERS top,left,bottom,right,color,speed,boxtype,shadow,btitle,bcolor
PRIVATE t,b,l,r,s,oldcolor,retscr,boxframe,seed1,seed2
retscr=boxscr(top,left,bottom,right)
oldcolor=SETCOLOR()
boxframe=getbox(boxtype)
seed1=INT((bottom-top)/2)
seed2=INT((right-left)/2)
t=top+seed1
l=left+seed2
b=t
r=l
SETCOLOR(color)
SET CURSOR OFF
DO WHILE ( t > top .AND. l > left) .AND. ( b < bottom .AND. r < right)
@ t, l, b, r BOX boxframe
t = t - 1
l = l - ( seed2 / seed1)
b = b + 1
r = r + ( seed2 / seed1)
FOR s= 1 TO speed
NEXT s
ENDDO
@ top,left,bottom,right BOX boxframe
IF shadow
boxshadow(top,left,bottom,right)
ENDIF
IF PCOUNT() > 8
SETCOLOR(bcolor)
lenscr=((right-left)/2)+left
@ top,lenscr - (LEN(btitle)/2) SAY btitle
ENDIF
SETCOLOR(oldcolor)
SET CURSOR ON
RETURN (retscr)
********************************************
** MIDDLE BOX
** example: mbox(5,0,20,79,"GR+/R",30,1,.T.,"Dave's Menu","R/W")
**
FUNCTION mbox
*********************************************
PARAMETERS top,left,bottom,right,color,speed,boxtype,shadow,btitle,bcolor
PRIVATE t,b,l,r,s,oldcolor,retscr,boxframe
retscr=boxscr(top,left,bottom,right)
oldcolor=SETCOLOR()
boxframe=getbox(boxtype)
t=INT(top+(bottom-top)/2)
b=t
l=left
r=right
SETCOLOR(color)
SET CURSOR OFF
DO WHILE t > top .AND. b < bottom
FOR s= 1 TO speed
NEXT s
@ t,l,b,r BOX boxframe
t=t-1
b=b+1
ENDDO
@ top,left,bottom,right BOX boxframe
IF shadow
boxshadow(top,left,bottom,right)
ENDIF
IF PCOUNT() > 8
SETCOLOR(bcolor)
lenscr=((right-left)/2)+left
@ top,lenscr - (LEN(btitle)/2) SAY btitle
ENDIF
SETCOLOR(oldcolor)
SET CURSOR ON
RETURN (retscr)
********************************************
** POP BOX
** example: pbox(5,0,20,79,"GR+/R",30,1,.T.,"Dave's Menu","R/W")
**
FUNCTION pbox
********************************************
PARAMETERS top,left,bottom,right,color,speed,boxtype,shadow,btitle,bcolor
PRIVATE t,b,l,r,s,oldcolor,retscr,boxframe
retscr=boxscr(top,left,bottom,right)
oldcolor=SETCOLOR()
boxframe=getbox(boxtype)
t=bottom
b=t
l=left
r=right
SETCOLOR(color)
SET CURSOR OFF
DO WHILE t >= top
FOR s=1 TO speed
NEXT s
@ t,l,b,r BOX boxframe
t=t-1
ENDDO
IF shadow
boxshadow(top,left,bottom,right)
ENDIF
IF PCOUNT() > 8
SETCOLOR(bcolor)
lenscr=((right-left)/2)+left
@ top,lenscr - (LEN(btitle)/2) SAY btitle
ENDIF
SETCOLOR(oldcolor)
SET CURSOR ON
RETURN (retscr)
********************************************
** DROP BOX
** example: dbox(5,0,20,79,"GR+/R",30,1,.T.,"Dave's Menu","R/W")
**
FUNCTION dbox
********************************************
PARAMETERS top,left,bottom,right,color,speed,boxtype,shadow,btitle,bcolor
PRIVATE t,l,b,r,s,oldcolor,retscr,boxframe
retscr=boxscr(top,left,bottom,right)
oldcolor=SETCOLOR()
boxframe=getbox(boxtype)
t=top
b=t
l=left
r=right
SETCOLOR(color)
SET CURSOR OFF
DO WHILE b <= bottom
FOR s= 1 TO speed
NEXT s
@ t,l,b,r BOX boxframe
b=b+1
ENDDO
IF shadow
boxshadow(top,left,bottom,right)
ENDIF
IF PCOUNT() > 8
SETCOLOR(bcolor)
lenscr=((right-left)/2)+left
@ top,lenscr - (LEN(btitle)/2) SAY btitle
ENDIF
SETCOLOR(oldcolor)
SET CURSOR ON
RETURN (retscr)
**************************************
** BOX SHADOW- GREY ON BLACK
****
FUNCTION BoxShadow
**************************************
PARAMETERS top,left,bottom,right
PRIVATE stop,sleft,sbottom,sright
GREY_ON_BLACK="X"+CHR(8)
stop=bottom+1
sbottom=stop
sleft=left+1
sright=right+1
DO CASE
CASE bottom < 24 .AND. right < 79
RESTSCREEN( sbottom, sleft,sbottom,sright,;
TRANSFORM( SAVESCREEN(stop, sleft, sbottom, sright),;
REPLICATE(GREY_ON_BLACK, sright - sleft + 1 ) ) )
stop = top + 1
sleft = right + 1
sright = sleft
sbottom= bottom +1
RESTSCREEN( stop, sleft,sbottom,sright,;
TRANSFORM( SAVESCREEN(stop, sleft, sbottom, sright),;
REPLICATE(GREY_ON_BLACK, sbottom - stop + 1 ) ) )
CASE bottom = 24 .AND. right < 79
stop = top + 1
sleft = right + 1
sright = sleft
sbottom = bottom
RESTSCREEN( stop, sleft,sbottom,sright,;
TRANSFORM( SAVESCREEN(stop, sleft, sbottom, sright),;
REPLICATE(GREY_ON_BLACK, sbottom - stop + 1) ) )
CASE bottom < 24 .AND. right = 79
sright=right
RESTSCREEN( sbottom, sleft,sbottom,sright,;
TRANSFORM( SAVESCREEN(stop, sleft, sbottom, sright),;
REPLICATE(GREY_ON_BLACK, sright - sleft + 1 ) ) )
ENDCASE
RETURN (.T.)
***************
FUNCTION boxscr
***************
PARAMETERS top,left,bottom,right
PRIVATE retval
DO CASE
CASE bottom < 24 .AND. right < 79
retval=SAVESCREEN(top, left, bottom+1, right+1)
CASE bottom = 24 .AND. right < 79
retval=SAVESCREEN(top, left, bottom, right+1)
CASE bottom < 24 .AND. right = 79
retval=SAVESCREEN(top, left, bottom+1, right)
CASE bottom = 24 .AND. right = 79
retval=SAVESCREEN(top, left, bottom, right)
ENDCASE
RETURN (retval)
**************************************
FUNCTION getbox
*****************************************
* Example:
* scrframe=getbox(1)
****************************************
PARAMETERS btype
****< BOXES DEFINED > ****
**< Single-line box >**
* ┌───┐
* │ │
* └───┘
B_SINGLE=( CHR(218) + CHR(196) + CHR(191) + CHR(179) + ;
CHR(217) + CHR(196) + CHR(192) + CHR(179) + " ")
**< Double-line box >**
* ╔═══╗
* ║ ║
* ╚═══╝
B_DOUBLE=( CHR(201) + CHR(205) + CHR(187) + CHR(186) + ;
CHR(188) + CHR(205) + CHR(200) + CHR(186) + " ")
**< Single-line top, double-line sides >**
* ╓───╖
* ║ ║
* ╙───╜
B_SINGLE_DOUBLE=( CHR(214) + CHR(196) + CHR(183) + CHR(186) + ;
CHR(189) + CHR(196) + CHR(211) + CHR(186) + " ")
**< Double-line top, single-line sides >**
* ╒═══╕
* │ │
* ╘═══╛
B_DOUBLE_SINGLE=( CHR(213) + CHR(205) + CHR(184) + CHR(179) + ;
CHR(190) + CHR(205) + CHR(212) + CHR(179) + " ")
**< Thick box border all around >**
* █████
* █ █
* █████
B_THICK=(REPLICATE(CHR(219),8)+" ")
**< Single-top and left, double-bottom and right-side >**
* ┌───╖
* │ ║
* ╘═══╝
B_SINGLE_DOUBLE_B=( CHR(218) + CHR(196) + CHR(183) + CHR(186) + ;
CHR(188) + CHR(205) + CHR(212) + CHR(179) + " ")
**< Double-top and left-side, single-bottom and right
* ╔═══╕
* ║ │
* ╙───┘
B_DOUBLE_SINGLE_B=( CHR(201) + CHR(205) + CHR(184) + CHR(179) + ;
CHR(217) + CHR(196) + CHR(211) + CHR(186) + " ")
**< Music symbol >**
B_MUSIC=(REPLICATE(CHR(14),8)+" ")
**< Heart symbol >**
B_HEART=(REPLICATE(CHR(3),8)+" ")
**< Diamond symbol >**
B_DIAMOND=(REPLICATE(CHR(4),8)+" ")
************************
DO CASE
CASE btype=1
RETURN(B_SINGLE)
CASE btype=2
RETURN(B_DOUBLE)
CASE btype=3
RETURN(B_SINGLE_DOUBLE)
CASE btype=4
RETURN(B_DOUBLE_SINGLE)
CASE btype=5
RETURN(B_THICK)
CASE btype=6
RETURN(B_SINGLE_DOUBLE_B)
CASE btype=7
RETURN(B_DOUBLE_SINGLE_B)
CASE btype=8
RETURN(B_MUSIC)
CASE btype=9
RETURN(B_HEART)
CASE btype=10
RETURN(B_DIAMOND)
ENDCASE